<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>自定义事件</title>
</head>

<body>
    <!--view层模板-->
    <div id="vue">
        <todo>
            <todo-title slot="todo-title" :title="title"></todo-title>
            <todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item" v-bind:index="index"
                v-on:remove="removeItems(index)" :key="index">
            </todo-items>
        </todo>
    </div>
    <!--导入Vue.js-->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        //slot:插槽
        Vue.component("todo", {
            template: '<div>\
                         <slot name="todo-title"></slot>\
                         <ul>\
                            <slot name="todo-items"></slot>\
                         </ul>\
                        </div>'
        });
        Vue.component("todo-title", {
            props: ['title'],
            template: '<div>{{title}}</div>'
        });
        Vue.component("todo-items", {
            props: ['item', 'index'],
            //只能绑定当前组件的方法
            template: '<li>{{item}} <button @click="remove">删除</button></li>',
            methods: {
                remove: function (index) {
                    //this.$emit自定义事件分发
                    this.$emit('remove', index);
                }
            }
        });
        var vm = new Vue({
            el: "#vue",
            data: {
                title: "科目",
                todoItems: ['java', 'vue', 'html']
            },
            methods: {
                removeItems: function (index) {
                    this.todoItems.splice(index, 1);//一次删除一个元素
                }
            }
        })
    </script>
</body>

</html>